/**
 *
 */
package com.iapcursos.portal.procefet.modelo.beans.entitys;

import java.io.Serializable;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.persistence.CascadeType;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.MapKey;
import javax.persistence.OneToMany;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;
import javax.persistence.Transient;

/**
 * @author Gleison
 *
 */

@Entity
@Table(name = "HORARIOS")
public class Horario implements Serializable{
	/**
	 *
	 */
	private static final long serialVersionUID = 5411883526775119361L;
	@Id
	@GeneratedValue(strategy = GenerationType.AUTO)
	private int id;
	@Temporal(value=TemporalType.TIME)
	private Calendar horaInicio;
	@Temporal(value=TemporalType.TIME)
	private Calendar horaFim;
	@OneToMany(fetch=FetchType.EAGER, cascade=CascadeType.ALL, mappedBy="horario")
	@MapKey(name="diaSemana")
	private Map<DiaSemana, Aula> mapaAulas;
	@Transient
	Aula aula = null;
	Aula aulaE = null;
	@Transient
	private int contador = 0;



	public Map<DiaSemana, Aula> getMapaAulas() {
		return mapaAulas;
	}

	public void setMapaAulas(HashMap<DiaSemana, Aula> mapaAulas) {
		this.mapaAulas = mapaAulas;
	}

	public Horario() {

	}

	/**
	 * @return the id
	 */
	public int getId() {
		return id;
	}

	@Override
	public String toString(){
		SimpleDateFormat formatador = new SimpleDateFormat("hh:mm");
		String horaIni = formatador.format(this.horaInicio.getTime());
		String horaF = formatador.format(this.horaFim.getTime());

		return (horaIni+" - "+horaF);
	}

	public Calendar getHoraInicio() {
		return horaInicio;
	}

	public void setHoraInicio(Calendar horaInicio) {
		this.horaInicio = horaInicio;
	}

	public Calendar getHoraFim() {
		return horaFim;
	}

	public void setHoraFim(Calendar horaFim) {
		this.horaFim = horaFim;
	}

	public List<Aula> getAulas(){
		List<Aula> aulas = new ArrayList<Aula>();
		for (DiaSemana chave : mapaAulas.keySet()) {
			aulas.add(mapaAulas.get(chave));
		}
		return aulas;
	}


	public Aula getAula() {
	++contador;
	    switch (contador) {
	     	case 1:
	            this.aula = mapaAulas.get(DiaSemana.DOMINGO);
	            break;
	     	case 2:
	           this.aula = mapaAulas.get(DiaSemana.SEGUNDA);
	            break;
	        case 3:
	            this.aula = mapaAulas.get(DiaSemana.TERCA);
	            break;
	        case 4:
	            this.aula = mapaAulas.get(DiaSemana.QUARTA);
	            break;
	        case 5:
	            this.aula = mapaAulas.get(DiaSemana.QUINTA);
	            break;
	        case 6:
	            this.aula = mapaAulas.get(DiaSemana.SEXTA);
	            break;
	        case 7:
	            this.aula = mapaAulas.get(DiaSemana.SABADO);
	            break;
	      }


	      return this.aula;
	}

	public Aula getAulaE() {
		++contador;
	    switch (contador/3) {
	     	case 0:
	            this.aula = mapaAulas.get(DiaSemana.DOMINGO);
	            break;
	     	case 1:
	           this.aula = mapaAulas.get(DiaSemana.SEGUNDA);
	            break;
	        case 2:
	            this.aula = mapaAulas.get(DiaSemana.TERCA);
	            break;
	        case 3:
	            this.aula = mapaAulas.get(DiaSemana.QUARTA);
	            break;
	        case 4:
	            this.aula = mapaAulas.get(DiaSemana.QUINTA);
	            break;
	        case 5:
	            this.aula = mapaAulas.get(DiaSemana.SEXTA);
	            break;
	        case 6:
	            this.aula = mapaAulas.get(DiaSemana.SABADO);
	            break;
	      }


	      return this.aula;
	}

	public void setAulaE(Aula aulaE) {
		this.aulaE = aulaE;
	}

}
